/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.net.telnet; /*** * The TelnetOptionHandler class is the base class to be used * for implementing handlers for telnet options. * <p> * TelnetOptionHandler implements basic option handling * functionality and defines abstract methods that must be * implemented to define subnegotiation behaviour. * <p> * @author Bruno D'Avanzo ***/ public abstract class TelnetOptionHandler { /*** * Option code ***/ private int optionCode = -1; /*** * true if the option should be activated on the local side ***/ private boolean initialLocal = false; /*** * true if the option should be activated on the remote side ***/ private boolean initialRemote = false; /*** * true if the option should be accepted on the local side ***/ private boolean acceptLocal = false; /*** * true if the option should be accepted on the remote side ***/ private boolean acceptRemote = false; /*** * true if the option is active on the local side ***/ private boolean doFlag = false; /*** * true if the option is active on the remote side ***/ private boolean willFlag = false; /*** * Constructor for the TelnetOptionHandler. Allows defining desired * initial setting for local/remote activation of this option and * behaviour in case a local/remote activation request for this * option is received. * <p> * @param optcode - Option code. * @param initlocal - if set to true, a WILL is sent upon connection. * @param initremote - if set to true, a DO is sent upon connection. * @param acceptlocal - if set to true, any DO request is accepted. * @param acceptremote - if set to true, any WILL request is accepted. ***/ public TelnetOptionHandler(int optcode, boolean initlocal, boolean initremote, boolean acceptlocal, boolean acceptremote) { optionCode = optcode; initialLocal = initlocal; initialRemote = initremote; acceptLocal = acceptlocal; acceptRemote = acceptremote; } /*** * Returns the option code for this option. * <p> * @return Option code. ***/ public int getOptionCode() { return (optionCode); } /*** * Returns a boolean indicating whether to accept a DO * request coming from the other end. * <p> * @return true if a DO request shall be accepted. ***/ public boolean getAcceptLocal() { return (acceptLocal); } /*** * Returns a boolean indicating whether to accept a WILL * request coming from the other end. * <p> * @return true if a WILL request shall be accepted. ***/ public boolean getAcceptRemote() { return (acceptRemote); } /*** * Set behaviour of the option for DO requests coming from * the other end. * <p> * @param accept - if true, subsequent DO requests will be accepted. ***/ public void setAcceptLocal(boolean accept) { acceptLocal = accept; } /*** * Set behaviour of the option for WILL requests coming from * the other end. * <p> * @param accept - if true, subsequent WILL requests will be accepted. ***/ public void setAcceptRemote(boolean accept) { acceptRemote = accept; } /*** * Returns a boolean indicating whether to send a WILL request * to the other end upon connection. * <p> * @return true if a WILL request shall be sent upon connection. ***/ public boolean getInitLocal() { return (initialLocal); } /*** * Returns a boolean indicating whether to send a DO request * to the other end upon connection. * <p> * @return true if a DO request shall be sent upon connection. ***/ public boolean getInitRemote() { return (initialRemote); } /*** * Tells this option whether to send a WILL request upon connection. * <p> * @param init - if true, a WILL request will be sent upon subsequent * connections. ***/ public void setInitLocal(boolean init) { initialLocal = init; } /*** * Tells this option whether to send a DO request upon connection. * <p> * @param init - if true, a DO request will be sent upon subsequent * connections. ***/ public void setInitRemote(boolean init) { initialRemote = init; } /*** * Method called upon reception of a subnegotiation for this option * coming from the other end. * Must be implemented by the actual TelnetOptionHandler to specify * which response must be sent for the subnegotiation request. * <p> * @param suboptionData - the sequence received, whithout IAC SB & IAC SE * @param suboptionLength - the length of data in suboption_data * <p> * @return response to be sent to the subnegotiation sequence. TelnetClient * will add IAC SB & IAC SE. null means no response ***/ public abstract int[] answerSubnegotiation(int suboptionData[], int suboptionLength); /*** * This method is invoked whenever this option is acknowledged active on * the local end (TelnetClient sent a WILL, remote side sent a DO). * The method is used to specify a subnegotiation sequence that will be * sent by TelnetClient when the option is activated. * <p> * @return subnegotiation sequence to be sent by TelnetClient. TelnetClient * will add IAC SB & IAC SE. null means no subnegotiation. ***/ public abstract int[] startSubnegotiationLocal(); /*** * This method is invoked whenever this option is acknowledged active on * the remote end (TelnetClient sent a DO, remote side sent a WILL). * The method is used to specify a subnegotiation sequence that will be * sent by TelnetClient when the option is activated. * <p> * @return subnegotiation sequence to be sent by TelnetClient. TelnetClient * will add IAC SB & IAC SE. null means no subnegotiation. ***/ public abstract int[] startSubnegotiationRemote(); /*** * Returns a boolean indicating whether a WILL request sent to the other * side has been acknowledged. * <p> * @return true if a WILL sent to the other side has been acknowledged. ***/ boolean getWill() { return willFlag; } /*** * Tells this option whether a WILL request sent to the other * side has been acknowledged (invoked by TelnetClient). * <p> * @param state - if true, a WILL request has been acknowledged. ***/ void setWill(boolean state) { willFlag = state; } /*** * Returns a boolean indicating whether a DO request sent to the other * side has been acknowledged. * <p> * @return true if a DO sent to the other side has been acknowledged. ***/ boolean getDo() { return doFlag; } /*** * Tells this option whether a DO request sent to the other * side has been acknowledged (invoked by TelnetClient). * <p> * @param state - if true, a DO request has been acknowledged. ***/ void setDo(boolean state) { doFlag = state; } }